package com.example.stmp.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
    private Integer code;  //业务状态码
    private String message;   //提示信息
    private T data;       //响应数据

    /**
     * 结果集成功构造方法。
     * <p>
     * 创建一个表示操作成功的Result对象，其中包含状态码200和成功消息"操作成功"。
     * 此方法用于表示一种无数据返回的成功情况。
     *
     * @return Result 返回一个Result对象，表示操作成功。
     */
    public static Result success() {
        return new Result(200, "操作成功", null);
    }

    /**
     * 带数据的成功结果构造方法。
     * <p>
     * 创建一个表示操作成功的Result对象，其中包含状态码200、成功消息"操作成功"以及操作结果数据。
     * 此方法用于表示一种有数据返回的成功情况。
     *
     * @param data E 类型的数据，表示操作的具体结果。
     * @param <E>  数据的泛型类型。
     * @return Result 返回一个Result对象，包含操作成功信息及数据。
     */
    public static <E> Result<E> success(E data) {
        return new Result<>(200, "操作成功", data);
    }

    /**
     * 带数据的成功结果构造方法。
     * <p>
     * 创建一个表示操作成功的Result对象，其中包含状态码200、成功消息"操作成功"以及操作结果数据。
     * 此方法用于表示一种有数据返回的成功情况。
     *
     * @param message 提示信息
     * @return
     */
    public static Result success(String message) {return new Result(200, message, null);}

    /**
     * 错误结果构造方法。
     * <p>
     * 创建一个表示操作失败的Result对象，其中包含自定义的错误消息。
     * 此方法用于表示一种无数据返回的错误情况。
     *
     * @param message 错误消息，描述操作失败的具体原因。
     * @return Result 返回一个Result对象，表示操作失败。
     */
    public static Result error(String message) {
        return new Result(1, message, null);
    }

    /**
     * 带数据的错误结果构造方法。
     * <p>
     * 创建一个表示操作失败的Result对象，其中包含自定义的错误消息和操作结果数据。
     * 此方法用于表示一种有数据返回的错误情况。
     *
     * @param message 错误消息，描述操作失败的具体原因。
     * @param data    E 类型的数据，表示操作失败的详细信息。
     * @param <E>     数据的泛型类型。
     * @return Result 返回一个Result对象，包含操作失败信息及数据。
     */
    public static <E> Result<E> error(String message, E data) {
        return new Result(1, message, data);
    }


}